home *** CD-ROM | disk | FTP | other *** search
- {
- michael a vincze
-
- Below I have re-written your Paint method. It is commented where I made the
- changes. Get in touch with me if you have any questions.
- }
-
- procedure TNumConWindow.Paint(PaintDC : HDC; var PaintInfo : TPaintStruct);
- var
- X, Y : Integer;
- WRect : TRect;
- DeltaX,
- DeltaY,
- XSize,
- YSize : Integer;
- Perc : Real;
- Str : string;
- PC : PChar;
- PCP : Integer;
- SaveBK : LongInt;
- ThePen : HPen;
- TheBrush: HBrush;
- TheRect : TRect;
-
- const
- CP = 1;
- NumLic = 64;
- MaxCount = 6;
- Count : array [1..MaxCount] of Integer = (2, 4, 8, 16, 32, 64);
- OutStr : string = 'Hello Allen E. Stoner ';
-
- begin
- GetClientRect(HWindow, WRect);
- XSize := WRect.Right - WRect.Left;
- YSize := WRect.Bottom - WRect.Top - 40;
-
- Perc := YSize / (NumLic * 1.05);
- DeltaY := Round(Perc * 10);
-
- { Draw fat line at bottom of graph. The color is the system default. }
- MoveTo(PaintDC, 0, YSize);
- LineTo(PaintDC, XSize, YSize);
- MoveTo(PaintDC, 0, YSize + 1);
- LineTo(PaintDC, XSize, YSize + 1);
- MoveTo(PaintDC, 0, YSize + 2);
- LineTo(PaintDC, XSize, YSize + 2);
-
- { Draw horizontal lines. The color is the system default. }
- Y := YSize;
- while Y > 0 do
- begin
- Rectangle(PaintDC, 0, Y, XSize, Y - DeltaY);
- Y := Y - (DeltaY * 2);
- end;
-
- { Fill in rectangle at bottom yellow. This is the same size as WRect
- except the top is at YSize + 3. }
- TheBrush := CreateSolidBrush(RGB($FF, $FF, $00));
- CopyRect(TheRect, WRect);
- TheRect.Top := YSize + 3;
- FillRect(PaintDC, TheRect, TheBrush);
-
- { Draw vertical lines red. If you wanted to, you could draw rectangles
- instead of lines. Notice how I've selected a width of 4 for ThePen.
- You could also have a different color for each "bar" by having X index
- into an array of TColorRefs and changing ThePen for each new value of X.}
- ThePen := CreatePen(PS_SOLID, 4, RGB($FF, $00, $00));
- SelectObject(PaintDC, ThePen);
- for X := 1 to MaxCount do
- begin
- MoveTo(PaintDC, X * 10, YSize);
- LineTo(PaintDC, X * 10, Round(YSize - (Count[X] * Perc)));
- end;
-
- if CP = 1 then
- PCP := 300
- else
- PCP := CP - 1;
- PC := @OutStr[1];
-
- { Set the color of the text. Note GetSysColor is used merely as an example.
- Don't forget that the background of the text must also be colored. This
- color should be yellow, as in TheBrush, however a different color was
- selected for illustration purposes. Alternatively SetBkMode() could
- be used }
- SetTextColor(PaintDC, GetSysColor(COLOR_HIGHLIGHT));
- SetBkColor(PaintDC, RGB($00, $FF, $FF));
- { Use SetBkMode () instead of SetBkColor () to see what happens.
- SetBkMode (PaintDC, TRANSPARENT); }
-
- TextOut(PaintDC, 10, YSize+15, PC, Length(OutStr)-1);
-
- { Don't forget to delete the selected objects. }
- DeleteObject(ThePen);
- DeleteObject(TheBrush);
- end;